#include <logbase.h>

// 字符串操作函数strcpy、strlen、strcmp、strcat、strchr、strstr、strtok只针对字符串。
// 不是ASCII码的数据，可以通过memcpy、memset、memcmp、memchr

void check_strncpy()
{
    char tmpstr1[] = "123456789";
    char tmpstr2[5];
    char tmpstr3[1024];
    strncpy(tmpstr2, tmpstr1, sizeof(tmpstr2));
    // 打印信息来看，拷贝时，没有写结束符。
    logdebugc("%s", tmpstr2);
    strncpy(tmpstr3, tmpstr1, sizeof(tmpstr3));
    logdebugc("%s", tmpstr3);
    memcpy(tmpstr3, tmpstr1, sizeof(tmpstr3));
    logdebugc("%s", tmpstr3);
}

void check_strncat()
{
    char tmpstr1[] = "123456789";
    char tmpstr2[] = "abcdefghi";
    char tmpstr3[16];
    strncat(tmpstr3, tmpstr1, sizeof(tmpstr3));
    logdebugc("%s", tmpstr3);
    // 打印信息来看，拼接时，没有写结束符。
    strncat(tmpstr3, tmpstr2, sizeof(tmpstr3));
    logdebugc("%s", tmpstr3);
}

void check_strncmp()
{
    {
        char tmpstr1[] = "123456";
        char tmpstr2[] = "123456";
        logdebugc("%d", strncmp(tmpstr1, tmpstr2, sizeof(tmpstr1)));
    }
    {
        char tmpstr1[] = "123456\0\1";
        char tmpstr2[] = "123456\0\5";
        // 说明strncmp遇到结束符'\0'，提前结束比较。
        logdebugc("%d", strncmp(tmpstr1, tmpstr2, sizeof(tmpstr1)));
        logdebugc("%d", memcmp(tmpstr1, tmpstr2, sizeof(tmpstr1)));
    }
    {
        char tmpstr1[] = "123456\0\5";
        char tmpstr2[] = "123456";
        logdebugc("%d", strncmp(tmpstr1, tmpstr2, sizeof(tmpstr1)));
        logdebugc("%d", memcmp(tmpstr1, tmpstr2, sizeof(tmpstr1)));
    }
}

int main(int argc, char **argv)
{
    check_strncpy();
    check_strncat();
    check_strncmp();
    return 1;
}
